package aprendamos.java.dao;

import java.sql.*;
import java.util.*;

import aprendamos.java.bean.ClienteDTO;
import aprendamos.java.util.MySqlDBConn;

public class MySqlClienteDAO implements ClienteDAO  {

	
	/* (non-Javadoc)
	 * @see aprendamos.java.dao.ClienteDAO#eliminaClientes(java.lang.String[])
	 */
	
	/* (non-Javadoc)
	 * @see aprendamos.java.dao.ClienteDAO#registraCliente(aprendamos.java.bean.ClienteDTO)
	 */
	public int registraCliente(ClienteDTO objCliente) throws Exception{
		
		int resultado =0;

		Connection cn = MySqlDBConn.obtenerConexion();

		String sql =
			"insert into tbcliente(nombre,sueldo,sexo,fecnac," +
				"usuario,clave,foto) values (?,?,?,?,?,?,?)";
		
		PreparedStatement pst = cn.prepareStatement(sql);
		
		// asignamos valores a las interrogantes
		pst.setString(1, objCliente.getNombre());
		pst.setDouble(2, objCliente.getSueldo());
		pst.setString(3, objCliente.getSexo());
		
		// no olvidemos insertar la fecha :)
		java.sql.Date bdfecha= 
			new java.sql.Date(objCliente.getFecnac().getTime());
		pst.setDate(4, bdfecha);
				
		pst.setString(5, objCliente.getUsuario());
		pst.setString(6, objCliente.getClave());

		pst.setBinaryStream(7, null,0);
		
		if(objCliente.getFoto()!=null){
			pst.setBinaryStream(7, objCliente.getIsFoto(),objCliente.getIsFoto().available());
		}
			
		
		// ejecutamos la sentencia
		resultado = pst.executeUpdate();
		
		cn.close();
		
		return resultado;
		
	}
	
	/* (non-Javadoc)
	 * @see aprendamos.java.dao.ClienteDAO#buscaPorUsuario(java.lang.String)
	 */
	public ClienteDTO buscaPorUsuario(String usuario) throws Exception{
		
		ClienteDTO objClienteDTO=null;
		
		Connection cn = MySqlDBConn.obtenerConexion();
		
		//definimos la sentencia
		String sql="select usuario,clave,nombre,sueldo,sexo,fecnac,foto " + " " +
			"from tbcliente where usuario = ?";
			
		//la preparamos
		PreparedStatement pst=cn.prepareStatement(sql);
		//asignamos valores a las interrogantes
		pst.setString(1,usuario);
			
			
		//ejecutamos
			
		ResultSet rs=pst.executeQuery();

		//si hay datos, recuperamos un regsitro
		if(rs.next()){
			
			objClienteDTO = new ClienteDTO();
			objClienteDTO.setUsuario(rs.getString(1));
			objClienteDTO.setClave(rs.getString(2));
			objClienteDTO.setNombre(rs.getString(3));
			objClienteDTO.setSueldo(rs.getDouble(4));
			objClienteDTO.setSexo(rs.getString(5));
			objClienteDTO.setFecnac(rs.getDate(6));
			objClienteDTO.setIsFoto(rs.getBinaryStream(7));
			
		}
		
		cn.close();		
		
		return objClienteDTO;
	}
	
	
	
	/* (non-Javadoc)
	 * @see aprendamos.java.dao.ClienteDAO#eliminaClientes(java.lang.String[])
	 */
	public void eliminaClientes(String[] clientes) throws Exception{

		Connection cn = MySqlDBConn.obtenerConexion();

		String sql ="delete from  tbcliente where usuario = ?";
		
		PreparedStatement pst = cn.prepareStatement(sql);
		// recibimos un arreglo con los usuarios de clientes que vamos a 
		// eliminar
		
		
		// hagamoslo con un foreach :)

		
		cn.close();
		
	}
	
	/* (non-Javadoc)
	 * @see aprendamos.java.dao.ClienteDAO#listaPorNombre(java.lang.String)
	 */
	/* (non-Javadoc)
	 * @see aprendamos.java.dao.ClienteDAO#listaPorNombre(java.lang.String)
	 */
	public List<ClienteDTO> listaPorNombre(String vnombre) throws Exception{
		
		ArrayList<ClienteDTO> clientes= new ArrayList<ClienteDTO>();
		
		Connection cn = MySqlDBConn.obtenerConexion();
		
		//definimos la sentencia
		String sql="select usuario,clave,nombre,sueldo,sexo,fecnac " + " " +
			"from tbcliente where nombre like ?";
			
		//la preparamos
		PreparedStatement pst=cn.prepareStatement(sql);
		//asignamos valores a las interrogantes
		pst.setString(1,"%"+vnombre+"%");
			
			
		//ejecutamos
			
		ResultSet rs=pst.executeQuery();
			
		while(rs.next()){
			//hay dayos, recuperamos un ergsitro
			ClienteDTO	cliente = new ClienteDTO();
				
				
			cliente.setClave(rs.getString(2));
			cliente.setUsuario(rs.getString(1));
			cliente.setNombre(rs.getString(3));
			cliente.setSueldo(rs.getDouble(4));
			cliente.setSexo(rs.getString(5));
			cliente.setFecnac(rs.getDate(6));
				
			clientes.add(cliente);
		}		
			
		cn.close();		
		
		
		return clientes;
		
	}
	
}
